package com.ruoyi.common.core.domain.entity.socket.bean;

import com.ruoyi.common.constant.socket.DeviceTypeContant;
import com.ruoyi.common.core.domain.entity.system.SysBoat;
import lombok.Data;

import java.util.Date;

/**
 * 惯导状态信息。
 */
@Data
public class NavigationInfo extends BaseDataPiece {

    /**
     * 当前时间。
     */
    private Date currTime;
    /**
     * 定位卫星数量 1个字节 取值范围：0-255，默认值0
     */
    private short satelliteNum;
    /**
     * 航向HDG,即船首向(监控系统取此值) 2个字节 取值范围：0-359.99°，分辨率0.01°，从0开始，默认值0
     */
    private int hdg;
    /**
     * 航向COG,即对地航向(监控系统不取此值) 2个字节 取值范围：0-359.99°，分辨率0.01°，从0开始，默认值0。
     * HDG与COG这两个数据虽然都是指航向，但在有风流影响时是不一样的。
     */
    private int cog;
    /**
     * 对地航速SOG(监控系统取此值) 2个字节 取值范围：0-100kn，分辨率0.01kn，从0开始，默认值0。
     * kn表示节，1节=1海里/小时=1.852公里/小时=0.514444m/s
     */
    private int sog;
    /**
     * 对水航速SOW(监控系统不取此值) 2个字节 取值范围：0-100kn，分辨率0.01kn，从0开始，默认值0
     */
    private int sow;
    /**
     * 纬度 4个字节 取值范围：-90 ~ 90°，分辨率0.0000001°，0x7fffffff对应0°，默认值0x7fffffff
     */
    private double lat;
    /**
     * 经度 4个字节 取值范围：-180 ~ 180°，分辨率0.0000001°，0x7fffffff对应0°，默认值0x7fffffff
     */
    private double lon;

    private SysBoat sysBoat;

    public NavigationInfo(byte systemCode, byte deviceCode) {
        super(systemCode, deviceCode);
    }

    @Override
    public int getDataPieceLength() {
        return 42;
    }

    @Override
    public void setDeviceType() {
        deviceType = DeviceTypeContant.NavigationInfo;
    }
}
